//保存回调函数，处理服务器推送的到客户端的信息
callbackFunc = {};
//发生信息到服务器
function wsSend(cmd,data,callback) {
    //先注册回调函数
    callbackFunc[cmd] = callback
    let initData = {
        cmd:cmd,
        data:data,
        seq:Date.now().toString()
    };
    let sendData = JSON.stringify(initData);
    socket.send(sendData)
}

//注册监听服务器推送的路由处理函数
function registerCallbackFunc(cmd,callback) {
    callbackFunc[cmd] = callback
}

//ws连接地址
var socket
// 避免重复连接
var lockReconnect = false;
// 定时任务
var tt;

//重连方法
function reconnect() {
    if(lockReconnect) {
        return;
    };
    lockReconnect = true;
    //没连接上会一直重连，设置延迟避免请求过多，  有定时任务 先取消再设置
    tt && clearTimeout(tt);
    tt = setTimeout(function () {
        createWebSocket();
        lockReconnect = false;
    }, 2000);
}

function createWebSocket() {
    try {
        socket = new WebSocket("ws://127.0.0.1:8080/ws");
        // Connection opened
        socket.addEventListener("open", function (event) {
            wsSend("login",{"token":"tokendfdfhgdfg"},function (data) {
                console.log("login 接口回调",data)
            })
        });
        // 监听服务器到客户端信息
        socket.addEventListener("message", function (event) {
            // console.log("Message from server ", event.data);
            //处理各种推送消息
            let data = JSON.parse(event.data);
            if (callbackFunc[data.cmd]) {
                callbackFunc[data.cmd](data)
            }
        });

        socket.addEventListener("close", function (event) {
            reconnect()
        });
    } catch(e) {
        console.log('catch' + e);
        reconnect();
    }
}

//创建WebSocket连接
createWebSocket()



